home *** CD-ROM | disk | FTP | other *** search
/ IRIX 6.2 Applications 1996 May / SGI IRIX 6.2 Applications 1996 May.iso / dist / impr_dev.idb / usr / impressario / src / libstiff / error.c.z / error.c
C/C++ Source or Header  |  1996-05-06  |  3KB  |  133 lines

  1. /*
  2.  * error.c
  3.  *
  4.  * Copyright 1993, Silicon Graphics, Inc.
  5.  * All Rights Reserved.
  6.  *
  7.  * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
  8.  * the contents of this file may not be disclosed to third parties, copied or
  9.  * duplicated in any form, in whole or in part, without the prior written
  10.  * permission of Silicon Graphics, Inc.
  11.  *
  12.  * RESTRICTED RIGHTS LEGEND:
  13.  * Use, duplication or disclosure by the Government is subject to restrictions
  14.  * as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
  15.  * and Computer Software clause at DFARS 252.227-7013, and/or in similar or
  16.  * successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
  17.  * rights reserved under the Copyright Laws of the United States.
  18.  */
  19.  
  20. #include <stdio.h>
  21. #include <string.h>
  22. #include <unistd.h>
  23. #include <msgs/uxsgiimpr.h>
  24. #include <stiff.h>
  25.  
  26. int STerrno;
  27.  
  28. typedef struct {
  29.     char *catToken;        /* Message catalog token */
  30.     char *defMsg;        /* Default message */
  31. } ErrorMessage;
  32.  
  33. static ErrorMessage errorStrings[] = {
  34.     /* STENOMEM */        {
  35.                 _SGI_LIBSTIFF_STENOMEM,
  36.                 "Out of memory"
  37.                 },
  38.     /* STENOTFOUND */        {
  39.                 _SGI_LIBSTIFF_STENOTFOUND,
  40.                 "Tag not found"
  41.                 },
  42.     /* STEBADTAG */        {
  43.                     _SGI_LIBSTIFF_STEBADTAG,
  44.                 "Invalid tag"
  45.                 },
  46.     /* STEBADSTREAM */        {
  47.                     _SGI_LIBSTIFF_STEBADSTREAM,
  48.                 "Not a valid tiff stream"
  49.                 },
  50.     /* STENEEDSEEK */        {
  51.                     _SGI_LIBSTIFF_STENEEDSEEK,
  52.                 "Non-stream operation"
  53.                 },
  54.     /* STEREADFROMWRITE */    {
  55.                     _SGI_LIBSTIFF_STEREADFROMWRITE,
  56.                 "Attempt to read from a write stream"
  57.                 },
  58.     /* STEWRITETOREAD */    {
  59.                     _SGI_LIBSTIFF_STEWRITETOREAD,
  60.                 "Attempt to write to a read stream"
  61.                 },
  62.     /* STESYSCALL */        {
  63.                     _SGI_LIBSTIFF_STESYSCALL,
  64.                 "System call failed"
  65.                 },
  66.     /* STEBADIMAGE */        {
  67.                     _SGI_LIBSTIFF_STEBADIMAGE,
  68.                 "Invalid image file directory"
  69.                 },
  70.     /* STEEOF */                {
  71.                     _SGI_LIBSTIFF_STEEOF,
  72.                 "End of stream"
  73.                 },
  74. };
  75.  
  76. #define NSTRINGS (sizeof(errorStrings)/sizeof(ErrorMessage))
  77.  
  78. /*
  79.  *  int
  80.  *  STPerror(char *pre)
  81.  *
  82.  *  Description:
  83.  *      Print an error message to stderr based on the value of
  84.  *      STerrno.  This can be called after a libstiff function has
  85.  *      failed to present diagnostics to the user.  pre will be
  86.  *      printed first, then a colon and a space, then the error
  87.  *      message, and then a newline.
  88.  *
  89.  *  Parameters:
  90.  *      pre  prefix to be printed before the error message
  91.  */
  92.  
  93. void
  94. STPerror(char *pre)
  95. {
  96.     if (pre && strlen(pre) != 0) {
  97.     (void)fprintf(stderr, "%s: %s\n", pre, STErrorString(STerrno));
  98.     } else {
  99.     (void)fprintf(stderr, "%s\n", STErrorString(STerrno));
  100.     }
  101. }
  102.  
  103. /*
  104.  *  char *
  105.  *  STErrorString(int err)
  106.  *
  107.  *  Description:
  108.  *      Get a string representation of err.  This will only be
  109.  *      something meaningful if err is in the range of STEBASE to
  110.  *      STELAST in stiff.h.
  111.  *
  112.  *  Parameters:
  113.  *      err  a valid error code for STerrno
  114.  *
  115.  *  Returns:
  116.  *     A character string describing the error.
  117.  */
  118.  
  119. char *
  120. STErrorString(int err)
  121. {
  122.     static char buf[100];
  123.  
  124.     if (STEBASE <= err && err < STEBASE + NSTRINGS) {
  125.     return gettxt(errorStrings[err - STEBASE].catToken,
  126.               errorStrings[err - STEBASE].defMsg);
  127.     }
  128.  
  129.     (void)sprintf(buf, gettxt(_SGI_LIBSTIFF_UNKNOWN_ERROR,
  130.                 "Error code %d"), err);
  131.     return buf;
  132. }
  133.